package com.neuedu.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class SqlUtil {
	//数据库的连接信息可以随意改变，但是不影响，代码使用，还要符合开闭原则 
	/**
	 *:1： 建一个properties文件：用于存放连接的信息，
	 *      driver=com.mysql.jdbc.Driver
	 *      url=jdbc:mysql://127.0.0.1:3306/productinfo
	 *      user=root
	 *      password=123456
	 *  2：使用文件的调用形成InputStream，
	 * :3：把inputStream流加载到Properties对象中，使用Properties对象调用信息。
	 * */
	
    //1:加载驱动
	/**
	 * 使用的是static代码块
	 * */
	static {
		try {
			Class.forName(Param.DRVIER);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}   
	
	//2:连接数据库
	/**
	 * 通过static方法
	 * 因为要返回一个Connection对象 所以返回值为Connection
	 * 无参
	 * */
	public static Connection getConn() throws SQLException {
		return DriverManager.getConnection(Param.URL, Param.USER, Param.PASSWORED);
	}
	
	//测试连接是否成功
		/*public static void main(String[] args) throws SQLException {
			System.out.println(getConn());
		}*/
	
	//6:关闭数据库
	/**
	 *  使用static方法
	 *  没有返回值，有形参--应为有两个参数，或者三个参数--使用可变参数：“...变量名”
	 *  可变参数是一个可变的数据
	 * */
	
	public static void close(Object ...objects) {
		if(objects!=null&&objects.length>0) {
			try {
				//关闭：首先判断是哪个类(instanceof)，然后强制向下转型为相对应的类型，最后进行关闭，
				for(Object obj:objects) {
					if(obj instanceof Connection) {
						((Connection)obj).close();
					}
					
					if(obj instanceof PreparedStatement) {
						((PreparedStatement)obj).close();
					}
					
					if(obj instanceof ResultSet) {
						((ResultSet)obj).close();
					}
				}
				
			}catch(SQLException e) {
				e.printStackTrace();
			}
		}
		
	}
	
	
	
}
